#ifndef MATRIX_MULTIPLIER_H
#define MATRIX_MULTIPLIER_H

#include "Common.h"

class SparseMatrixRLS {
private:
    vector<vector<int>> data;
    vector<int> rowStart;
    int rows, cols;

public:
    SparseMatrixRLS(int r, int c);
    
    void addElement(int row, int col, int value);
    
    void buildRowLinks();
    
    SparseMatrixRLS multiply(const SparseMatrixRLS& other) const;
    
    void printDense() const;
    
    void printSparse() const;
    
    void interactiveInput(const string& matrixName);
    
    int getRows() const { return rows; }
    int getCols() const { return cols; }
};

class MatrixMultiplier {
public:
    static void testMatrixMultiplication();
    
    static void interactiveTest();
};

#endif